<!DOCTYPE html>
<!-- saved from url=(0050)https://www.cnblogs.com/xuelisheng/p/11158110.html -->
<html lang="zh-cn"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="referrer" content="origin">
    <meta property="og:description" content="转自：https://www.cnblogs.com/xiaoxi/p/6392154.html 一、final关键字的基本用法 在Java中，final关键字可以用来修饰类、方法和变量（包括成员变量">
    <meta http-equiv="Cache-Control" content="no-transform">
    <meta http-equiv="Cache-Control" content="no-siteapp">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>【java中的final关键字】 - 我得去图书馆了 - 博客园</title>
    
    <link rel="stylesheet" href="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/blog-common.min.css">
    <link id="MainCss" rel="stylesheet" href="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/bundle-clover.min.css">
    
    <link id="mobile-style" media="only screen and (max-width: 767px)" type="text/css" rel="stylesheet" href="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/bundle-clover-mobile.min.css">
    
    <link type="application/rss+xml" rel="alternate" href="https://www.cnblogs.com/xuelisheng/rss">
    <link type="application/rsd+xml" rel="EditURI" href="https://www.cnblogs.com/xuelisheng/rsd.xml">
    <link type="application/wlwmanifest+xml" rel="wlwmanifest" href="https://www.cnblogs.com/xuelisheng/wlwmanifest.xml">
    <script src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/amp4ads-host-v0.js.下载"></script><script async="" src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/analytics.js.下载"></script><script type="text/javascript" src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/encoder.js.下载"></script><script src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/jquery-2.2.0.min.js.下载"></script>
    <script src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/blog-common.min.js.下载"></script>
    <script>
        var currentBlogId = 440068;
        var currentBlogApp = 'xuelisheng';
        var cb_enable_mathjax = false;
        var isLogined = false;
        var skinName = 'clover';
    </script>
    
    
    
<link rel="preload" href="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/f.txt" as="script"><script type="text/javascript" src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/f.txt"></script><script src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/pubads_impl_2020050602.js.下载" async=""></script><link rel="prefetch" href="https://tpc.googlesyndication.com/safeframe/1-0-37/html/container.html"></head>
<body>
    <a name="top"></a>
    
    <!--done-->
<table cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
<tbody><tr>
	<td width="299" background="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/banner1.jpg"></td>
	<td background="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/banner.jpg">
<!--done-->
<div class="header">
	<div class="headerText">
		<a id="Header1_HeaderTitle" class="headermaintitle HeaderMainTitle" href="https://www.cnblogs.com/xuelisheng/">我得去图书馆了</a>
<br>
		


	</div>
</div>

</td>
	<td width="296" background="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/banner2.jpg"></td>
</tr>
</tbody></table>
<div id="mylinks">
<a id="blog_nav_sitehome" class="menu" href="https://www.cnblogs.com/">
博客园</a>
&nbsp; &nbsp;

<a id="blog_nav_myhome" class="menu" href="https://www.cnblogs.com/xuelisheng/">
首页</a>
&nbsp; &nbsp;
<a href="http://q.cnblogs.com/" class="menu" target="_blank">博问</a>&nbsp; &nbsp;
<a href="http://home.cnblogs.com/ing/" class="menu" target="_blank">闪存</a>&nbsp; &nbsp;


<a id="blog_nav_newpost" class="menu" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">
新随笔</a>
&nbsp; &nbsp;

<a id="blog_nav_rss" class="menu" href="javascript:void(0)" data-rss="https://www.cnblogs.com/xuelisheng/rss/">
订阅</a>

<a id="blog_nav_rss_image" href="https://www.cnblogs.com/xuelisheng/rss/">
    <img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/xml.gif" alt="订阅">
</a>&nbsp; &nbsp;

<a id="blog_nav_admin" class="menu" href="https://i.cnblogs.com/">
管理</a>



</div>
<div id="mytopmenu">
	
		<div id="mystats">
			<!--done-->
<div class="blogStats">
posts - 
203,&nbsp;
comments - 
5,&nbsp;
trackbacks - 
0

</div>

</div>
	
</div>
<div id="centercontent">
	<div id="post_detail">
<!--done-->
<div class="post">
	<div class="postTitle">
		
<a id="cb_post_title_url" class="postTitle2" href="https://www.cnblogs.com/xuelisheng/p/11158110.html">【java中的final关键字】</a>

	</div>
	
<div id="cnblogs_post_body" class="blogpost-body ">
    <p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;"><strong>转自：<a href="https://www.cnblogs.com/xiaoxi/p/6392154.html">https://www.cnblogs.com/xiaoxi/p/6392154.html</a></strong></span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;"><strong>一、final关键字的基本用法</strong></span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">在Java中，final关键字可以用来<span style="color: #ff0000;">修饰类</span>、<span style="color: #ff0000;">方法</span>和<span style="color: #ff0000;">变量</span>（包括成员变量和局部变量）。下面就从这三个方面来了解一下final关键字的基本用法。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;"><strong>1、修饰类</strong></span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">　&nbsp;&nbsp;当用final修饰一个类时，<strong><span style="color: #ff0000;">表明这个类不能被继承</span></strong>。也就是说，如果一个类你永远不会让他被继承，就可以用final进行修饰。final类中的成员变量可以根据需要设为final，但是要注意<strong><span style="color: #ff0000;">final类中的所有成员方法都会被隐式地指定为final方法</span></strong>。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/1427627-20190709142520996-877280530.png" alt="" width="330" height="188"></span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">在使用final修饰类的时候，要注意谨慎选择，除非这个类真的在以后不会用来继承或者出于安全的考虑，<span style="color: #ff0000;">尽量不要将类设计为final类</span>。</span></p>
<p><strong>2、修饰方法</strong></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp; 下面这段话摘自《Java编程思想》第四版第143页：</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">　 “使用final方法的原因有两个。<strong><span style="color: #ff0000;">第一个原因是把方法锁定，以防任何继承类修改它的含义</span></strong>；<strong><span style="color: #ff0000;">第二个原因是效率</span></strong>。在早期的Java实现版本中，会将final方法转为内嵌调用。但是如果方法过于庞大，可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中，不需要使用final方法进行这些优化了。“</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">　　因此，如果只有在想明确禁止该方法在子类中被覆盖的情况下才将方法设置为final的。即<strong><span style="color: #ff0000;">父类的final方法是不能被子类所覆盖的</span></strong>，也就是说子类是不能够存在和父类一模一样的方法的。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp; final修饰的方法表示此方法已经是“<strong><span style="color: #ff0000;">最后的、最终的</span></strong>”含义，亦即<strong><span style="color: #ff0000;">此方法不能被重写</span></strong>（可以重载多个final修饰的方法）。此处需要注意的一点是：因为重写的前提是子类可以从父类中继承此方法，如果父类中final修饰的方法同时访问控制权限为private，将会导致子类中不能直接继承到此方法，因此，此时可以在子类中定义相同的方法名和参数，此时不再产生重写与final的矛盾，而是在子类中重新定义了新的方法。（注：类的private方法会隐式地被指定为final方法。）</span></p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> B extends A {
</span><span style="color: #008080;"> 2</span> 
<span style="color: #008080;"> 3</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) {
</span><span style="color: #008080;"> 4</span> 
<span style="color: #008080;"> 5</span> <span style="color: #000000;">    }
</span><span style="color: #008080;"> 6</span> 
<span style="color: #008080;"> 7</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> getName() {
</span><span style="color: #008080;"> 8</span>         
<span style="color: #008080;"> 9</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">10</span> <span style="color: #000000;">}
</span><span style="color: #008080;">11</span> 
<span style="color: #008080;">12</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> A {
</span><span style="color: #008080;">13</span> 
<span style="color: #008080;">14</span>     <span style="color: #008000;">/*</span><span style="color: #008000;">*
</span><span style="color: #008080;">15</span> <span style="color: #008000;">     * 因为private修饰，子类中不能继承到此方法，因此，子类中的getName方法是重新定义的、
</span><span style="color: #008080;">16</span> <span style="color: #008000;">     * 属于子类本身的方法，编译正常
</span><span style="color: #008080;">17</span>      <span style="color: #008000;">*/</span>
<span style="color: #008080;">18</span>     <span style="color: #0000ff;">private</span> final <span style="color: #0000ff;">void</span><span style="color: #000000;"> getName() {
</span><span style="color: #008080;">19</span>         
<span style="color: #008080;">20</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">21</span> 
<span style="color: #008080;">22</span>     <span style="color: #008000;">/*</span><span style="color: #008000;"> 因为pblic修饰，子类可以继承到此方法，导致重写了父类的final方法，编译出错
</span><span style="color: #008080;">23</span> <span style="color: #008000;">    public final void getName() {
</span><span style="color: #008080;">24</span>     
<span style="color: #008080;">25</span> <span style="color: #008000;">    }
</span><span style="color: #008080;">26</span>     <span style="color: #008000;">*/</span>
<span style="color: #008080;">27</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div></div>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;"><strong>3、修饰变量</strong></span><br><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修饰变量是final用得最多的地方，也是本文接下来要重点阐述的内容。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0000;">final</span><strong><span style="color: #ff0000;">成员变量表示常量，只能被赋值一次，赋值后值不再改变</span>。</strong></span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">　　当final修饰一个<strong><span style="color: #ff0000;">基本数据类型</span></strong>时，表示该基本数据类型的值一旦在<strong><span style="color: #ff0000;">初始化后便不能发生变化</span></strong>；如果final修饰一个<strong><span style="color: #ff0000;">引用类型</span></strong>时，则在对其初始化之后便<strong><span style="color: #ff0000;">不能再让其指向其他对象</span></strong>了，但该<strong><span style="color: #ff0000;">引用所指向的对象的内容是可以发生变化的</span></strong>。本质上是一回事，因为引用的值是一个地址，final要求值，即地址的值不发生变化。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">　　<span style="color: #ff0000;"><strong>final修饰一个成员变量（属性），必须要显示初始化。</strong><strong>这里有两种初始化方式</strong></span>，一种是在变量<span style="color: #ff0000;">声明的时候初始化</span>；第二种方法是在声明变量的时候不赋初值，<span style="background-color: #ffff00;"><strong><span style="color: #ff0000;">但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值</span></strong></span>。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">　　当函数的参数类型声明为final时，说明该参数是只读型的。即你可以读取使用该参数，但是无法改变该参数的值。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;举个例子：</span></p>
<p><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/1427627-20190709143651313-1117857184.png" alt="" width="304" height="137"></p>
<p>上面的一段代码中，对变量i和obj的重新赋值都报错了。</p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;"><strong>二、深入理解final关键字</strong></span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">在了解了final关键字的基本用法之后，这一节我们来看一下final关键字容易混淆的地方。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;"><strong>1、类的final变量和普通变量有什么区别？</strong></span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp; 当用<strong><span style="color: #ff0000;">final作用于类的成员变量时</span></strong>，成员变量（注意是类的成员变量，局部变量只需要保证在使用之前被初始化赋值即可）<strong><span style="color: #ff0000;">必须在定义时或者构造器中进行初始化赋值</span></strong>，而且final变量一旦被初始化赋值之后，就不能再被赋值了。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp; 那么final变量和普通变量到底有何区别呢？下面请看一个例子：</span></p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Test { 
</span><span style="color: #008080;"> 2</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args)  { 
</span><span style="color: #008080;"> 3</span>         String a = <span style="color: #800000;">"</span><span style="color: #800000;">hello2</span><span style="color: #800000;">"</span><span style="color: #000000;">;   
</span><span style="color: #008080;"> 4</span>         final String b = <span style="color: #800000;">"</span><span style="color: #800000;">hello</span><span style="color: #800000;">"</span><span style="color: #000000;">; 
</span><span style="color: #008080;"> 5</span>         String d = <span style="color: #800000;">"</span><span style="color: #800000;">hello</span><span style="color: #800000;">"</span><span style="color: #000000;">; 
</span><span style="color: #008080;"> 6</span>         String c = b + <span style="color: #800080;">2</span><span style="color: #000000;">;   
</span><span style="color: #008080;"> 7</span>         String e = d + <span style="color: #800080;">2</span><span style="color: #000000;">; 
</span><span style="color: #008080;"> 8</span>         System.<span style="color: #0000ff;">out</span>.println((a ==<span style="color: #000000;"> c)); 
</span><span style="color: #008080;"> 9</span>         System.<span style="color: #0000ff;">out</span>.println((a ==<span style="color: #000000;"> e)); 
</span><span style="color: #008080;">10</span> <span style="color: #000000;">    } 
</span><span style="color: #008080;">11</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div></div>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">输出结果：true、false</span><br><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp; 大家可以先想一下这道题的输出结果。为什么第一个比较结果为true，而第二个比较结果为fasle。这里面就是final变量和普通变量的区别了，当final变量是基本数据类型以及String类型时，如果在编译期间能知道它的确切值，则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方，相当于直接访问的这个常量，不需要在运行时确定。这种和C语言中的宏替换有点像。因此在上面的一段代码中，由于变量b被final修饰，因此会被当做编译器常量，所以在使用到b的地方会直接将变量b 替换为它的值。而对于变量d的访问却需要在运行时通过链接来进行。想必其中的区别大家应该明白了，不过要注意，只有在编译期间能确切知道final变量值的情况下，编译器才会进行这样的优化，比如下面的这段代码就不会进行优化：</span></p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Test { 
</span><span style="color: #008080;"> 2</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args)  { 
</span><span style="color: #008080;"> 3</span>         String a = <span style="color: #800000;">"</span><span style="color: #800000;">hello2</span><span style="color: #800000;">"</span><span style="color: #000000;">;   
</span><span style="color: #008080;"> 4</span>         final String b =<span style="color: #000000;"> getHello(); 
</span><span style="color: #008080;"> 5</span>         String c = b + <span style="color: #800080;">2</span><span style="color: #000000;">;   
</span><span style="color: #008080;"> 6</span>         System.<span style="color: #0000ff;">out</span>.println((a ==<span style="color: #000000;"> c)); 
</span><span style="color: #008080;"> 7</span>   
<span style="color: #008080;"> 8</span> <span style="color: #000000;">    } 
</span><span style="color: #008080;"> 9</span>       
<span style="color: #008080;">10</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> String getHello() { 
</span><span style="color: #008080;">11</span>         <span style="color: #0000ff;">return</span> <span style="color: #800000;">"</span><span style="color: #800000;">hello</span><span style="color: #800000;">"</span><span style="color: #000000;">; 
</span><span style="color: #008080;">12</span> <span style="color: #000000;">    } 
</span><span style="color: #008080;">13</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div></div>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">这段代码的输出结果为false。这里要注意一点就是：不要以为某些数据是final就可以在编译期知道其值，通过变量b我们就知道了，在这里是使用getHello()方法对其进行初始化，他要在运行期才能知道其值。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;"><strong>2、被final修饰的引用变量指向的对象内容可变吗？</strong></span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">在上面提到被final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象，那么该引用变量指向的对象的内容可变吗？看下面这个例子：</span></p>
<p>&nbsp;</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Test { 
</span><span style="color: #008080;"> 2</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args)  { 
</span><span style="color: #008080;"> 3</span>         final MyClass myClass = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MyClass(); 
</span><span style="color: #008080;"> 4</span>         System.<span style="color: #0000ff;">out</span>.println(++<span style="color: #000000;">myClass.i); 
</span><span style="color: #008080;"> 5</span>   
<span style="color: #008080;"> 6</span> <span style="color: #000000;">    } 
</span><span style="color: #008080;"> 7</span> <span style="color: #000000;">} 
</span><span style="color: #008080;"> 8</span>   
<span style="color: #008080;"> 9</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass { 
</span><span style="color: #008080;">10</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span><span style="color: #000000;">; 
</span><span style="color: #008080;">11</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div></div>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">这段代码可以顺利编译通过并且有输出结果，输出结果为1。这说明<strong><span style="color: #ff0000;">引用变量被final修饰之后，虽然不能再指向其他对象，但是它指向的对象的内容是可变的</span></strong>。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;"><strong>3、final参数的问题</strong></span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp; 在实际应用中，我们除了可以用final修饰成员变量、成员方法、类，还可以修饰参数、若某个<strong><span style="color: #ff0000;">参数被final修饰了，则代表了该参数是不可改变的</span></strong>。如果在方法中我们修改了该参数，则编译器会提示你：The final local variable i cannot be assigned. It must be blank and not using a compound assignment。看下面的例子：</span></p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> TestFinal {
</span><span style="color: #008080;"> 2</span>     
<span style="color: #008080;"> 3</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args){
</span><span style="color: #008080;"> 4</span>         TestFinal testFinal = <span style="color: #0000ff;">new</span><span style="color: #000000;"> TestFinal();
</span><span style="color: #008080;"> 5</span>         <span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 6</span> <span style="color: #000000;">        testFinal.changeValue(i);
</span><span style="color: #008080;"> 7</span>         System.<span style="color: #0000ff;">out</span><span style="color: #000000;">.println(i);
</span><span style="color: #008080;"> 8</span>         
<span style="color: #008080;"> 9</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">10</span>     
<span style="color: #008080;">11</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> changeValue(final <span style="color: #0000ff;">int</span><span style="color: #000000;"> i){
</span><span style="color: #008080;">12</span>         <span style="color: #008000;">//</span><span style="color: #008000;">final参数不可改变
</span><span style="color: #008080;">13</span>         <span style="color: #008000;">//</span><span style="color: #008000;">i++;</span>
<span style="color: #008080;">14</span>         System.<span style="color: #0000ff;">out</span><span style="color: #000000;">.println(i);
</span><span style="color: #008080;">15</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">16</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div></div>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">上面这段代码changeValue方法中的参数i用final修饰之后，就不能在方法中更改变量i的值了。值得注意的一点，方法changeValue和main方法中的变量i<strong><span style="color: #ff0000;">根本就不是一个变量</span></strong>，因为java参数传递采用的是值传递，对于<strong><span style="color: #ff0000;">基本类型的变量</span></strong>，相当于直接将变量进行了拷贝。所以即使没有final修饰的情况下，在方法内部改变了变量i的值也不会影响方法外的i。（所以这种添加final的形式意义不是很大）。</span></p>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">再看下面这段代码：</span></p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> TestFinal {
</span><span style="color: #008080;"> 2</span>     
<span style="color: #008080;"> 3</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args){
</span><span style="color: #008080;"> 4</span>         TestFinal testFinal = <span style="color: #0000ff;">new</span><span style="color: #000000;"> TestFinal();
</span><span style="color: #008080;"> 5</span>         StringBuffer buffer = <span style="color: #0000ff;">new</span> StringBuffer(<span style="color: #800000;">"</span><span style="color: #800000;">hello</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 6</span> <span style="color: #000000;">        testFinal.changeValue(buffer);
</span><span style="color: #008080;"> 7</span>         System.<span style="color: #0000ff;">out</span><span style="color: #000000;">.println(buffer);
</span><span style="color: #008080;"> 8</span>         
<span style="color: #008080;"> 9</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">10</span>     
<span style="color: #008080;">11</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> changeValue(final StringBuffer buffer){
</span><span style="color: #008080;">12</span>         <span style="color: #008000;">//</span><span style="color: #008000;">final修饰引用类型的参数，不能再让其指向其他对象，但是对其所指向的内容是可以更改的。
</span><span style="color: #008080;">13</span>         <span style="color: #008000;">//</span><span style="color: #008000;">buffer = new StringBuffer("hi");</span>
<span style="color: #008080;">14</span>         buffer.append(<span style="color: #800000;">"</span><span style="color: #800000;">world</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #008080;">15</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">16</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div></div>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">运行这段代码就会发现输出结果为 helloworld。很显然，用final进行修饰虽不能再让buffer指向其他对象，但对于buffer指向的对象的内容是可以改变的。现在假设一种情况，如果把final去掉，结果又会怎样？看下面的代码：</span></p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> TestFinal {
</span><span style="color: #008080;"> 2</span>     
<span style="color: #008080;"> 3</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args){
</span><span style="color: #008080;"> 4</span>         TestFinal testFinal = <span style="color: #0000ff;">new</span><span style="color: #000000;"> TestFinal();
</span><span style="color: #008080;"> 5</span>         StringBuffer buffer = <span style="color: #0000ff;">new</span> StringBuffer(<span style="color: #800000;">"</span><span style="color: #800000;">hello</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 6</span> <span style="color: #000000;">        testFinal.changeValue(buffer);
</span><span style="color: #008080;"> 7</span>         System.<span style="color: #0000ff;">out</span><span style="color: #000000;">.println(buffer);
</span><span style="color: #008080;"> 8</span>         
<span style="color: #008080;"> 9</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">10</span>     
<span style="color: #008080;">11</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> changeValue(StringBuffer buffer){
</span><span style="color: #008080;">12</span>         <span style="color: #008000;">//</span><span style="color: #008000;">buffer重新指向另一个对象</span>
<span style="color: #008080;">13</span>         buffer = <span style="color: #0000ff;">new</span> StringBuffer(<span style="color: #800000;">"</span><span style="color: #800000;">hi</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #008080;">14</span>         buffer.append(<span style="color: #800000;">"</span><span style="color: #800000;">world</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #008080;">15</span>         System.<span style="color: #0000ff;">out</span><span style="color: #000000;">.println(buffer);
</span><span style="color: #008080;">16</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">17</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/copycode.gif" alt="复制代码"></a></span></div></div>
<div id="cnblogs_post_body" class="blogpost-body">
<p>运行结果：</p>
<div class="cnblogs_code">
<pre>hiworld
hello</pre>
</div>
<p><span style="font-family: &#39;comic sans ms&#39;, sans-serif;">从运行结果可以看出，将final去掉后，同时在changeValue中让buffer指向了其他对象，并不会影响到main方法中的buffer，原因在于java采用的是值传递，对于引用变量，传递的是引用的值，也就是说让实参和形参同时指向了同一个对象，因此让形参重新指向另一个对象对实参并没有任何影响。</span></p>
</div>
</div>
<div id="MySignature"></div>
<div class="clear"></div>
<div id="blog_post_info_block">
<div id="EntryTag">
    标签: 
            <a href="https://www.cnblogs.com/xuelisheng/tag/java/">java</a></div>

    <div id="blog_post_info">
<div id="green_channel">
        <a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(11158110,cb_blogId,1);green_channel_success(this,&#39;谢谢推荐！&#39;);">好文要顶</a>
        <a id="green_channel_follow" onclick="follow(&#39;6bf55287-a7c8-4b46-60f1-08d5d829f90d&#39;);" href="javascript:void(0);">关注我</a>
    <a id="green_channel_favorite" onclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>
    <a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" onclick="ShareToTsina()"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/icon_weibo_24.png" alt=""></a>
    <a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" onclick="shareOnWechat()"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/wechat.png" alt=""></a>
</div>
<div id="author_profile">
    <div id="author_profile_info" class="author_profile_info">
            <a href="https://home.cnblogs.com/u/xuelisheng/" target="_blank"><img src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/20181005144011.png" class="author_avatar" alt=""></a>
        <div id="author_profile_detail" class="author_profile_info">
            <a href="https://home.cnblogs.com/u/xuelisheng/">我得去图书馆了</a><br>
            <a href="https://home.cnblogs.com/u/xuelisheng/followees/">关注 - 1</a><br>
            <a href="https://home.cnblogs.com/u/xuelisheng/followers/">粉丝 - 14</a>
        </div>
    </div>
    <div class="clear"></div>
    <div id="author_profile_honor"></div>
    <div id="author_profile_follow">
                <a href="javascript:void(0);" onclick="follow(&#39;6bf55287-a7c8-4b46-60f1-08d5d829f90d&#39;);return false;">+加关注</a>
    </div>
</div>
<div id="div_digg">
    <div class="diggit" onclick="votePost(11158110,&#39;Digg&#39;)">
        <span class="diggnum" id="digg_count">3</span>
    </div>
    <div class="buryit" onclick="votePost(11158110,&#39;Bury&#39;)">
        <span class="burynum" id="bury_count">0</span>
    </div>
    <div class="clear"></div>
    <div class="diggword" id="digg_tips">
    </div>
</div>

<script type="text/javascript">
    currentDiggType = 0;
</script></div>
    <div class="clear"></div>
    <div id="post_next_prev">

    <a href="https://www.cnblogs.com/xuelisheng/p/10996601.html" class="p_n_p_prefix">« </a> 上一篇：    <a href="https://www.cnblogs.com/xuelisheng/p/10996601.html" title="发布于 2019-06-10 11:08">【面试题总结】1、统计字符串中某个字符出现的次数(2-Python实现)</a>
    <br>
    <a href="https://www.cnblogs.com/xuelisheng/p/11160245.html" class="p_n_p_prefix">» </a> 下一篇：    <a href="https://www.cnblogs.com/xuelisheng/p/11160245.html" title="发布于 2019-07-09 20:25">【java中的static关键字】</a>

</div>
</div>
	<div class="postDesc">posted on 
<span id="post-date">2019-07-09 16:12</span>&nbsp;
<a href="https://www.cnblogs.com/xuelisheng/">我得去图书馆了</a>&nbsp;
阅读(<span id="post_view_count">3119</span>)&nbsp;
评论(<span id="post_comment_count">0</span>)&nbsp;
<a href="https://i.cnblogs.com/EditPosts.aspx?postid=11158110" rel="nofollow">编辑</a>&nbsp;
<a href="javascript:void(0)" onclick="AddToWz(11158110);return false;">收藏</a></div>
</div>


<script src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/highlight.min.js.下载"></script>
<script>markdown_highlight();</script>
<script>
    var allowComments = true, cb_blogId = 440068, cb_blogApp = 'xuelisheng', cb_blogUserGuid = '6bf55287-a7c8-4b46-60f1-08d5d829f90d';
    var cb_entryId = 11158110, cb_entryCreatedDate = '2019-07-09 16:12', cb_postType = 1; 
    loadViewCount(cb_entryId);
    loadSideColumnAd();
</script><a name="!comments"></a>
<div id="blog-comments-placeholder"></div>
<script>
    var commentManager = new blogCommentManager();
    commentManager.renderComments(0);
</script>

<div id="comment_form" class="commentform">
    <a name="commentform"></a>
    <div id="divCommentShow"></div>
    <div id="comment_nav"><span id="span_refresh_tips"></span><a href="javascript:void(0);" onclick="return RefreshCommentList();" id="lnk_RefreshComments" runat="server" clientidmode="Static">刷新评论</a><a href="https://www.cnblogs.com/xuelisheng/p/11158110.html#" onclick="return RefreshPage();">刷新页面</a><a href="https://www.cnblogs.com/xuelisheng/p/11158110.html#top">返回顶部</a></div>
    <div id="comment_form_container" style="visibility: visible;"><div class="login_tips">
    注册用户登录后才能发表评论，请 
    <a rel="nofollow" href="javascript:void(0);" class="underline" onclick="return login(&#39;commentform&#39;);">登录</a>
     或 
    <a rel="nofollow" href="javascript:void(0);" class="underline" onclick="return register();">注册</a>，
    <a href="https://www.cnblogs.com/">访问</a> 网站首页。
</div></div>
    <div class="ad_text_commentbox" id="ad_text_under_commentbox"></div>
    <div id="ad_t2"><a href="http://www.ucancode.com/index.htm" target="_blank" onclick="ga(&#39;send&#39;, &#39;event&#39;, &#39;Link&#39;, &#39;click&#39;, &#39;T2-ucancode&#39;)">【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库</a><br><a href="https://developer.aliyun.com/article/714297?utm_content=g_1000088937" target="_blank" onclick="ga(&#39;send&#39;, &#39;event&#39;, &#39;Link&#39;, &#39;click&#39;, &#39;T2-阿里云开发者社区&#39;)">【推荐】35个面试详解，170道挑战题，1460个精彩问答 | Java面试宝典</a><br><a href="https://developer.aliyun.com/ask/258515?utm_content=g_1000088951" target="_blank" onclick="ga(&#39;send&#39;, &#39;event&#39;, &#39;Link&#39;, &#39;click&#39;, &#39;T2-阿里云开发者社区&#39;)">【推荐】精品问答：大数据常见问题之 flink 五十问</a><br></div>
    <div id="opt_under_post"></div>
    <script async="async" src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/gpt.js.下载"></script>
    <script>
        var googletag = googletag || {};
        googletag.cmd = googletag.cmd || [];
    </script>
    <script>
        googletag.cmd.push(function () {
            googletag.defineSlot("/1090369/C1", [300, 250], "div-gpt-ad-1546353474406-0").addService(googletag.pubads());
            googletag.defineSlot("/1090369/C2", [468, 60], "div-gpt-ad-1539008685004-0").addService(googletag.pubads());
            googletag.pubads().enableSingleRequest();
            googletag.enableServices();
        });
    </script>
    <div id="cnblogs_c1" class="c_ad_block">
        <div id="div-gpt-ad-1546353474406-0" style="height:250px; width:300px;" data-google-query-id="CPa3vMSxrukCFU2_vQodl0AHdg"><div id="google_ads_iframe_/1090369/C1_0__container__" style="border: 0pt none;"><iframe id="google_ads_iframe_/1090369/C1_0" title="3rd party ad content" name="google_ads_iframe_/1090369/C1_0" width="300" height="250" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" style="border: 0px; vertical-align: bottom;" data-google-container-id="1" data-load-complete="true" src="./【java中的final关键字】 - 我得去图书馆了 - 博客园_files/saved_resource.html"></iframe></div></div>
    </div>
    <div id="under_post_news"><div class="recomm-block"><b>相关博文：</b><br>·  <a title="浅析Java中的final关键字" href="https://www.cnblogs.com/dolphin0520/p/3736238.html" target="_blank" onclick="clickRecomItmem(3736238)">浅析Java中的final关键字</a><br>·  <a title="浅谈Java中的final关键字" href="https://www.cnblogs.com/xiaoxi/p/6392154.html" target="_blank" onclick="clickRecomItmem(6392154)">浅谈Java中的final关键字</a><br>·  <a title="Java中的final关键字" href="https://www.cnblogs.com/xiaoxiaoyihan/p/4974273.html" target="_blank" onclick="clickRecomItmem(4974273)">Java中的final关键字</a><br>·  <a title="java中final关键字的用法" href="https://www.cnblogs.com/lixiaolun/p/4317004.html" target="_blank" onclick="clickRecomItmem(4317004)">java中final关键字的用法</a><br>·  <a title="Java中final关键字" href="https://www.cnblogs.com/fangpengchengbupter/p/7858510.html" target="_blank" onclick="clickRecomItmem(7858510)">Java中final关键字</a><br>»  <a target="_blank" href="https://recomm.cnblogs.com/blogpost/11158110">更多推荐...</a><div id="cnblogs_t5"><a href="https://developer.aliyun.com/article/727629?utm_content=g_1000088946" target="_blank" onclick="ga(&#39;send&#39;, &#39;event&#39;, &#39;Link&#39;, &#39;click&#39;, &#39;T5-阿里云开发者社区&#39;)">阿里云研究中心16本白皮书全套下载！涵盖AI，云计算等领域</a></div></div></div>
    <div id="cnblogs_c2" class="c_ad_block">
        <div id="div-gpt-ad-1539008685004-0" style="height:60px; width:468px;" data-google-query-id="COCpu8SxrukCFU2_vQodl0AHdg">
            <script>
                if (new Date() >= new Date(2018, 9, 13)) {
                    googletag.cmd.push(function () { googletag.display("div-gpt-ad-1539008685004-0"); });
                }
            </script>
        <div id="google_ads_iframe_/1090369/C2_0__container__" style="border: 0pt none; width: 468px; height: 60px;"></div></div>
    </div>
    <div id="under_post_kb">
<div class="itnews c_ad_block">
    <b>最新 IT 新闻</b>:
    <br>
 ·              <a href="https://news.cnblogs.com/n/661759/" target="_blank">ofo联合创始人于信获百万美元种子融资 投身酒类行业</a>
            <br>
 ·              <a href="https://news.cnblogs.com/n/661760/" target="_blank">微软 Family Safety iOS 和 Android 版开始预览</a>
            <br>
 ·              <a href="https://news.cnblogs.com/n/661758/" target="_blank">丰巢冤不冤？</a>
            <br>
 ·              <a href="https://news.cnblogs.com/n/661757/" target="_blank">新 MacBook Pro 是对这条产品线过去五年的最好总结</a>
            <br>
 ·              <a href="https://news.cnblogs.com/n/661756/" target="_blank">李飞飞成为 Twitter 董事会成员</a>
            <br>
    » <a href="https://news.cnblogs.com/" title="IT 新闻" target="_blank">更多新闻...</a>
</div></div>
    <div id="HistoryToday" class="c_ad_block"></div>
    <script type="text/javascript">
        fixPostBody();
        deliverBigBanner();
setTimeout(function() { incrementViewCount(cb_entryId); }, 50);        deliverAdT2();
        deliverAdC1();
        deliverAdC2();
        loadNewsAndKb();
        loadBlogSignature();
LoadPostCategoriesTags(cb_blogId, cb_entryId);        LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
        GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate, cb_postType);
        loadOptUnderPost();
        GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);
    </script>
</div></div>


</div>
<div id="leftcontent">
	
		<div id="leftcontentcontainer">
			
<div id="sidebar_news" class="newsItem"><!--done-->
<div class="newsItem">
	
<div id="blog-news">
    
    <div id="profile_block">
        昵称：
        <a href="https://home.cnblogs.com/u/xuelisheng/">
            我得去图书馆了
        </a>
        <br>
        园龄：
        <a href="https://home.cnblogs.com/u/xuelisheng/" title="入园时间：2018-06-24">
            1年10个月
        </a>
        <br>
        粉丝：
        <a href="https://home.cnblogs.com/u/xuelisheng/followers/">
            14
        </a>
        <br>
        关注：
        <a href="https://home.cnblogs.com/u/xuelisheng/followees/">
            1
        </a>
        <div id="p_b_follow">
<a href="javascript:void(0)" onclick="follow(&#39;6bf55287-a7c8-4b46-60f1-08d5d829f90d&#39;)">+加关注</a></div>
        <script>getFollowStatus('6bf55287-a7c8-4b46-60f1-08d5d829f90d');</script>
    </div>
</div>
</div>

</div>

<div id="sidebar_ad"></div><br>			
			<div id="blog-calendar" style="">

<table id="blogCalendar" class="Cal" cellspacing="0" cellpadding="0" title="Calendar" border="0">
    <tbody>
        <tr>
            <td colspan="7">
                <table class="CalTitle" cellspacing="0" border="0">
                    <tbody>
                        <tr>
                            <td class="CalNextPrev">
                                <a href="javascript:void(0);" onclick="loadBlogCalendar(&#39;2020/04/12&#39;); return false;">&lt;</a>
                            </td>
                            <td align="center">2020年5月</td>
                            <td align="right" class="CalNextPrev">
                                <a href="javascript:void(0);" onclick="loadBlogCalendar(&#39;2020/06/12&#39;); return false;">&gt;</a>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
        <tr>
                    <th class="CalDayHeader" align="center" abbr="日" scope="col">日</th>
                    <th class="CalDayHeader" align="center" abbr="一" scope="col">一</th>
                    <th class="CalDayHeader" align="center" abbr="二" scope="col">二</th>
                    <th class="CalDayHeader" align="center" abbr="三" scope="col">三</th>
                    <th class="CalDayHeader" align="center" abbr="四" scope="col">四</th>
                    <th class="CalDayHeader" align="center" abbr="五" scope="col">五</th>
                    <th class="CalDayHeader" align="center" abbr="六" scope="col">六</th>
        </tr>
            <tr>
                            <td class="CalOtherMonthDay" align="center">26</td>
                            <td class="CalOtherMonthDay" align="center">27</td>
                            <td class="CalOtherMonthDay" align="center">28</td>
                            <td class="CalOtherMonthDay" align="center">29</td>
                            <td class="CalOtherMonthDay" align="center">30</td>
                        <td class="" align="center">
                            <a href="https://www.cnblogs.com/xuelisheng/archive/2020/05/01.html"><u>1</u></a>
                        </td>
                    <td class="CalWeekendDay" align="center">
                        2
                    </td>
            </tr>
                <tr>
                        <td class="CalWeekendDay" align="center">
                            3
                        </td>
                            <td class="" align="center">
                                4
                            </td>
                            <td class="" align="center">
                                <a href="https://www.cnblogs.com/xuelisheng/archive/2020/05/05.html"><u>5</u></a>
                            </td>
                            <td class="" align="center">
                                6
                            </td>
                            <td class="" align="center">
                                7
                            </td>
                            <td class="" align="center">
                                8
                            </td>
                        <td class="CalWeekendDay" align="center">
                            9
                        </td>
                </tr>
                <tr>
                        <td class="CalWeekendDay" align="center">
                            10
                        </td>
                            <td class="" align="center">
                                11
                            </td>
                            <td class="CalTodayDay" align="center">
                                12
                            </td>
                            <td class="" align="center">
                                13
                            </td>
                            <td class="" align="center">
                                14
                            </td>
                            <td class="" align="center">
                                15
                            </td>
                        <td class="CalWeekendDay" align="center">
                            16
                        </td>
                </tr>
                <tr>
                        <td class="CalWeekendDay" align="center">
                            17
                        </td>
                            <td class="" align="center">
                                18
                            </td>
                            <td class="" align="center">
                                19
                            </td>
                            <td class="" align="center">
                                20
                            </td>
                            <td class="" align="center">
                                21
                            </td>
                            <td class="" align="center">
                                22
                            </td>
                        <td class="CalWeekendDay" align="center">
                            23
                        </td>
                </tr>
                <tr>
                        <td class="CalWeekendDay" align="center">
                            24
                        </td>
                            <td class="" align="center">
                                25
                            </td>
                            <td class="" align="center">
                                26
                            </td>
                            <td class="" align="center">
                                27
                            </td>
                            <td class="" align="center">
                                28
                            </td>
                            <td class="" align="center">
                                29
                            </td>
                        <td class="CalWeekendDay" align="center">
                            30
                        </td>
                </tr>
                <tr>
                        <td class="CalWeekendDay" align="center">
                            31
                        </td>
                            <td class="CalOtherMonthDay" align="center">
                                1
                            </td>
                            <td class="CalOtherMonthDay" align="center">
                                2
                            </td>
                            <td class="CalOtherMonthDay" align="center">
                                3
                            </td>
                            <td class="CalOtherMonthDay" align="center">
                                4
                            </td>
                            <td class="CalOtherMonthDay" align="center">
                                5
                            </td>
                        <td class="CalOtherMonthDay" align="center">
                            6
                        </td>
                </tr>
    </tbody>
</table></div><script>loadBlogDefaultCalendar();</script>
			<div id="blog-sidecolumn">
<!-- 搜索 -->
<div id="sidebar_search" class="sidebar-block">
    <div id="sidebar_search" class="mySearch">
        <h3 class="catListTitle">搜索</h3>
        <div id="sidebar_search_box">
            <div id="widget_my_zzk" class="div_my_zzk">
                <input type="text" id="q" onkeydown="return zzk_go_enter(event);" class="input_my_zzk">&nbsp;<input onclick="zzk_go()" type="button" value="找找看" id="btnZzk" class="btn_my_zzk">
            </div>
            <div id="widget_my_google" class="div_my_zzk">
                <input type="text" name="google_q" id="google_q" onkeydown="return google_go_enter(event);" class="input_my_zzk">&nbsp;<input onclick="google_go()" type="button" value="谷歌搜索" class="btn_my_zzk">
            </div>
        </div>
    </div>
</div>

<!-- 常用链接 -->
<div id="sidebar_shortcut" class="sidebar-block">
    
<h3 class="catListTitle">
常用链接
</h3>
<ul>
        <li>

<a href="https://www.cnblogs.com/xuelisheng/p/" title="我的博客的随笔列表">我的随笔</a>
</li>
        <li>

<a href="https://www.cnblogs.com/xuelisheng/MyComments.html" title="我的发表过的评论列表">我的评论</a>
</li>
        <li>

<a href="https://www.cnblogs.com/xuelisheng/OtherPosts.html" title="我评论过的随笔列表">我的参与</a>
</li>
        <li>

<a href="https://www.cnblogs.com/xuelisheng/RecentComments.html" title="我的博客的评论列表">最新评论</a>
</li>
        <li>

<a href="https://www.cnblogs.com/xuelisheng/tag/" title="我的博客的标签列表">我的标签</a>
</li>
</ul>

<!-- TODO: 检查是否有使用这一部分的控件，如果没有则应该删除。 -->
<div id="itemListLin_con" style="display:none">
    <ul>

    </ul>
</div>

</div>

<!-- 最新随笔 -->



<!-- 我的标签 -->
<div id="sidebar_toptags" class="sidebar-block">
    
<h3>我的标签</h3>
<div id="MyTag">
    <ul>
        
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/%E6%A0%A1%E6%8B%9B%E9%9D%A2%E8%AF%95/">校招面试</a>(34)
        </li>
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/C%2B%2B/">C++</a>(25)
        </li>
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/Linux%20C/">Linux C</a>(25)
        </li>
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/redis/">redis</a>(12)
        </li>
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/centos%E7%B3%BB%E5%88%97/">centos系列</a>(10)
        </li>
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/%E6%A0%A1%E6%8B%9B%E9%9D%A2%E8%AF%95%E4%B9%8B%20%E5%89%91%E6%8C%87offer/">校招面试之 剑指offer</a>(9)
        </li>
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/">网络编程</a>(6)
        </li>
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a>(6)
        </li>
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/%E9%9D%A2%E8%AF%95%E7%B3%BB%E5%88%97%E4%B9%8B%20C%2B%2B%E5%9F%BA%E7%A1%80/">面试系列之 C++基础</a>(6)
        </li>
        <li>
            <a href="https://www.cnblogs.com/xuelisheng/tag/java/">java</a>(5)
        </li>
    <li>
        <a href="https://www.cnblogs.com/xuelisheng/tag/">更多</a>
    </li>

    </ul>
</div>

</div>

<!-- 积分与排名 -->


<!-- 随笔分类、随笔档案、文章分类、新闻分类、相册、链接 -->
<div id="sidebar_categories">
    
<!--done-->
		<h1 class="catListTitle">

随笔档案


</h1>
				<ul class="catList">
			
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2020/05.html" rel="" target="">
    2020年5月(2)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2020/04.html" rel="" target="">
    2020年4月(7)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2020/03.html" rel="" target="">
    2020年3月(2)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2020/02.html" rel="" target="">
    2020年2月(2)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2019/09.html" rel="" target="">
    2019年9月(6)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2019/08.html" rel="" target="">
    2019年8月(6)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2019/07.html" rel="" target="">
    2019年7月(3)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2019/06.html" rel="" target="">
    2019年6月(4)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2019/05.html" rel="" target="">
    2019年5月(13)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2019/04.html" rel="" target="">
    2019年4月(12)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2019/03.html" rel="" target="">
    2019年3月(7)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2019/02.html" rel="" target="">
    2019年2月(5)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2019/01.html" rel="" target="">
    2019年1月(5)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2018/12.html" rel="" target="">
    2018年12月(26)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2018/11.html" rel="" target="">
    2018年11月(10)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2018/10.html" rel="" target="">
    2018年10月(10)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2018/09.html" rel="" target="">
    2018年9月(6)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2018/08.html" rel="" target="">
    2018年8月(4)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2018/07.html" rel="" target="">
    2018年7月(62)
</a>

</li>
				<li class="catListItem"> 
<a href="https://www.cnblogs.com/xuelisheng/archive/2018/06.html" rel="" target="">
    2018年6月(11)
</a>

</li>
			
				</ul>


</div>

<!-- 最新评论 -->
<div id="sidebar_recentcomments" class="sidebar-block">
    <div id="recent_comments_wrap" class="RecentComment">
    <h3 class="catListTitle">最新评论</h3>
    <div class="RecentCommentBlock">
        <ul>
                    <li class="recent_comment_title"><a href="https://www.cnblogs.com/xuelisheng/p/9278800.html">1. Re:C++ 内存解析</a></li>
                    <li class="recent_comment_body">1 #include &lt;cstdio&gt; 2 3 char* f1() 4 { 5 char* p = NULL; 6 char a = 'B'; 7 p = &amp;a; 8 return p; 9 } 1...</li>
                    <li class="recent_comment_author">--elephantcc</li>
                    <li class="recent_comment_title"><a href="https://www.cnblogs.com/xuelisheng/p/9278800.html">2. Re:C++ 内存解析</a></li>
                    <li class="recent_comment_body">我好像明白了，这个main函数中定义了个p指针，经过函数调用,p储存的是a的地址，栈区销毁之后，地址内容被销毁，这块地址块没有内容,给它赋值操作，它就会被赋值过去。</li>
                    <li class="recent_comment_author">--seakykong</li>
                    <li class="recent_comment_title"><a href="https://www.cnblogs.com/xuelisheng/p/9278800.html">3. Re:C++ 内存解析</a></li>
                    <li class="recent_comment_body">我按您上面代码char* f1(){	char* p = NULL;	char a;	p = &amp;a;	return p;}int main(){	char* p;	p = f1();	*p = 'a'...</li>
                    <li class="recent_comment_author">--seakykong</li>
                    <li class="recent_comment_title"><a href="https://www.cnblogs.com/xuelisheng/p/9988626.html">4. Re:关于gcc、make和CMake的区别</a></li>
                    <li class="recent_comment_body">very good!</li>
                    <li class="recent_comment_author">--johnwang9</li>
                    <li class="recent_comment_title"><a href="https://www.cnblogs.com/xuelisheng/p/10628457.html">5. Re:【c++】内存检查工具Valgrind介绍，安装及使用以及内存泄漏的常见原因</a></li>
                    <li class="recent_comment_body">大佬也是今年应届生吗。。。orz，同样是应届生，为何我如此弱，心塞塞</li>
                    <li class="recent_comment_author">--douzujun</li>
        </ul>
    </div>
</div>
</div>



<!-- 阅读排行榜 -->
<div id="sidebar_topviewedposts" class="sidebar-block">
    
<div id="topview_posts_wrap">
    <h3 class="catListTitle">阅读排行榜</h3>
    <div id="TopViewPostsBlock">
        <ul style="word-break:break-all">
                    <li>
                        <a href="https://www.cnblogs.com/xuelisheng/p/11452926.html">
                            1. 为centos7配置阿里yum源遇到的问题以及解决方法(6441)
                        </a>
                    </li>
                    <li>
                        <a href="https://www.cnblogs.com/xuelisheng/p/9744301.html">
                            2. C++ 单例模式(懒汉、饿汉模式)(6137)
                        </a>
                    </li>
                    <li>
                        <a href="https://www.cnblogs.com/xuelisheng/p/9231764.html">
                            3. C++中公有继承、保护继承、私有继承的区别(5973)
                        </a>
                    </li>
                    <li>
                        <a href="https://www.cnblogs.com/xuelisheng/p/9988626.html">
                            4. 关于gcc、make和CMake的区别(5208)
                        </a>
                    </li>
                    <li>
                        <a href="https://www.cnblogs.com/xuelisheng/p/10175615.html">
                            5. 【centos】centos安装g++(4912)
                        </a>
                    </li>
        </ul>
    </div>
</div>
</div>

<!-- 评论排行榜 -->
<div id="sidebar_topcommentedposts" class="sidebar-block">
    
<div id="topfeedback_posts_wrap">
    <h3 class="catListTitle">评论排行榜</h3>
    <div id="TopFeedbackPostsBlock">
        <ul style="word-break:break-all">
                    <li>
                        <a href="https://www.cnblogs.com/xuelisheng/p/9278800.html">
                            1. C++ 内存解析(3)
                        </a>
                    </li>
                    <li>
                        <a href="https://www.cnblogs.com/xuelisheng/p/9988626.html">
                            2. 关于gcc、make和CMake的区别(1)
                        </a>
                    </li>
                    <li>
                        <a href="https://www.cnblogs.com/xuelisheng/p/10628457.html">
                            3. 【c++】内存检查工具Valgrind介绍，安装及使用以及内存泄漏的常见原因(1)
                        </a>
                    </li>
        </ul>
    </div>
</div>
</div>

<!-- 推荐排行榜 -->
<div id="sidebar_topdiggedposts" class="sidebar-block">
    
<div id="topdigg_posts_wrap">
    <div class="catListView">
        <h3 class="catListTitle">推荐排行榜</h3>
        <div id="TopDiggPostsBlock">
            <ul style="word-break: break-all">
                        <li>
                            <a href="https://www.cnblogs.com/xuelisheng/p/9988626.html">
                                1. 关于gcc、make和CMake的区别(3)
                            </a>
                        </li>
                        <li>
                            <a href="https://www.cnblogs.com/xuelisheng/p/11158110.html">
                                2. 【java中的final关键字】(3)
                            </a>
                        </li>
                        <li>
                            <a href="https://www.cnblogs.com/xuelisheng/p/10963254.html">
                                3. 【C/C++】Linux的gcc和g++的区别(2)
                            </a>
                        </li>
                        <li>
                            <a href="https://www.cnblogs.com/xuelisheng/p/9339957.html">
                                4. 【校招面试 之 C/C++】第16题 C++ new和delete的实现原理(2)
                            </a>
                        </li>
                        <li>
                            <a href="https://www.cnblogs.com/xuelisheng/p/9339924.html">
                                5. 【校招面试 之 C/C++】第15题 C 回调函数(1)
                            </a>
                        </li>
            </ul>
        </div>
    </div>
</div>
</div></div>
                    <script>loadBlogSideColumn();</script></div>
	
</div>

<!--done-->
<div class="footer">
	Copyright © 2020 我得去图书馆了
<br><span id="poweredby">Powered by .NET Core on Kubernetes</span>
 Powered By<a href="https://www.cnblogs.com/">博客园</a>
</div>




    

</body></html>